home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / BYacc-CW 1.9 / defs.h < prev    next >
C/C++ Source or Header  |  1995-05-20  |  8KB  |  340 lines

  1. #include <assert.h>
  2. #include <ctype.h>
  3. #include <stdio.h>
  4.  
  5.  
  6. /*  machine-dependent definitions            */
  7. /*  the following definitions are for the Tahoe        */
  8. /*  they might have to be changed for other machines    */
  9.  
  10. /*  MAXCHAR is the largest unsigned character value    */
  11. /*  MAXSHORT is the largest value of a C short        */
  12. /*  MINSHORT is the most negative value of a C short    */
  13. /*  MAXTABLE is the maximum table size            */
  14. /*  BITS_PER_WORD is the number of bits in a C unsigned    */
  15. /*  WORDSIZE computes the number of words needed to    */
  16. /*    store n bits                    */
  17. /*  BIT returns the value of the n-th bit starting    */
  18. /*    from r (0-indexed)                */
  19. /*  SETBIT sets the n-th bit starting from r        */
  20.  
  21. #define    MAXCHAR        255
  22. #define    MAXSHORT    32767
  23. #define MINSHORT    -32768
  24. #define MAXTABLE    32500
  25. #define BITS_PER_WORD    32
  26. #define    WORDSIZE(n)    (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
  27. #define    BIT(r, n)    ((((r)[(n)>>5])>>((n)&31))&1)
  28. #define    SETBIT(r, n)    ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
  29.  
  30.  
  31. /*  character names  */
  32.  
  33. #define    NUL        '\0'    /*  the null character  */
  34. #define    NEWLINE        '\n'    /*  line feed  */
  35. #define    SP        ' '     /*  space  */
  36. #define    BS        '\b'    /*  backspace  */
  37. #define    HT        '\t'    /*  horizontal tab  */
  38. #define    VT        '\013'  /*  vertical tab  */
  39. #define    CR        '\r'    /*  carriage return  */
  40. #define    FF        '\f'    /*  form feed  */
  41. #define    QUOTE        '\''    /*  single quote  */
  42. #define    DOUBLE_QUOTE    '\"'    /*  double quote  */
  43. #define    BACKSLASH    '\\'    /*  backslash  */
  44.  
  45.  
  46. /* defines for constructing filenames */
  47.  
  48. #define CODE_SUFFIX    ".code.c"
  49. #define    DEFINES_SUFFIX    ".tab.h"
  50. #define    OUTPUT_SUFFIX    ".tab.c"
  51. #define    VERBOSE_SUFFIX    ".output"
  52.  
  53.  
  54. /* keyword codes */
  55.  
  56. #define TOKEN 0
  57. #define LEFT 1
  58. #define RIGHT 2
  59. #define NONASSOC 3
  60. #define MARK 4
  61. #define TEXT 5
  62. #define TYPE 6
  63. #define START 7
  64. #define UNION 8
  65. #define IDENT 9
  66.  
  67.  
  68. /*  symbol classes  */
  69.  
  70. #define UNKNOWN 0
  71. #define TERM 1
  72. #define NONTERM 2
  73.  
  74.  
  75. /*  the undefined value  */
  76.  
  77. #define UNDEFINED (-1)
  78.  
  79.  
  80. /*  action codes  */
  81.  
  82. #define SHIFT 1
  83. #define REDUCE 2
  84.  
  85.  
  86. /*  character macros  */
  87.  
  88. #define IS_IDENT(c)    (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
  89. #define    IS_OCTAL(c)    ((c) >= '0' && (c) <= '7')
  90. #define    NUMERIC_VALUE(c)    ((c) - '0')
  91.  
  92.  
  93. /*  symbol macros  */
  94.  
  95. #define ISTOKEN(s)    ((s) < start_symbol)
  96. #define ISVAR(s)    ((s) >= start_symbol)
  97.  
  98.  
  99. /*  storage allocation macros  */
  100.  
  101. #define CALLOC(k,n)    (calloc((unsigned)(k),(unsigned)(n)))
  102. #define    FREE(x)        (free((char*)(x)))
  103. #define MALLOC(n)    (malloc((unsigned)(n)))
  104. #define    NEW(t)        ((t*)allocate(sizeof(t)))
  105. #define    NEW2(n,t)    ((t*)allocate((unsigned)((n)*sizeof(t))))
  106. #define REALLOC(p,n)    (realloc((char*)(p),(unsigned)(n)))
  107.  
  108.  
  109. /*  the structure of a symbol table entry  */
  110.  
  111. typedef struct bucket bucket;
  112. struct bucket
  113. {
  114.     struct bucket *link;
  115.     struct bucket *next;
  116.     char *name;
  117.     char *tag;
  118.     short value;
  119.     short index;
  120.     short prec;
  121.     char class;
  122.     char assoc;
  123. };
  124.  
  125.  
  126. /*  the structure of the LR(0) state machine  */
  127.  
  128. typedef struct core core;
  129. struct core
  130. {
  131.     struct core *next;
  132.     struct core *link;
  133.     short number;
  134.     short accessing_symbol;
  135.     short nitems;
  136.     short items[1];
  137. };
  138.  
  139.  
  140. /*  the structure used to record shifts  */
  141.  
  142. typedef struct shifts shifts;
  143. struct shifts
  144. {
  145.     struct shifts *next;
  146.     short number;
  147.     short nshifts;
  148.     short shift[1];
  149. };
  150.  
  151.  
  152. /*  the structure used to store reductions  */
  153.  
  154. typedef struct reductions reductions;
  155. struct reductions
  156. {
  157.     struct reductions *next;
  158.     short number;
  159.     short nreds;
  160.     short rules[1];
  161. };
  162.  
  163.  
  164. /*  the structure used to represent parser actions  */
  165.  
  166. typedef struct action action;
  167. struct action
  168. {
  169.     struct action *next;
  170.     short symbol;
  171.     short number;
  172.     short prec;
  173.     char action_code;
  174.     char assoc;
  175.     char suppressed;
  176. };
  177.  
  178.  
  179. /* global variables */
  180.  
  181. extern char dflag;
  182. extern char lflag;
  183. extern char rflag;
  184. extern char tflag;
  185. extern char vflag;
  186. extern char *symbol_prefix;
  187.  
  188. extern char *myname;
  189. extern char *cptr;
  190. extern char *line;
  191. extern int lineno;
  192. #ifdef __MWERKS__
  193. extern int y_outline;
  194. #else
  195. extern int outline;
  196. #endif
  197. extern char *banner[];
  198. extern char *tables[];
  199. extern char *header[];
  200. extern char *body[];
  201. extern char *trailer[];
  202.  
  203. extern char *action_file_name;
  204. extern char *code_file_name;
  205. extern char *defines_file_name;
  206. extern char *input_file_name;
  207. extern char *output_file_name;
  208. extern char *text_file_name;
  209. extern char *union_file_name;
  210. extern char *verbose_file_name;
  211.  
  212. extern FILE *action_file;
  213. extern FILE *code_file;
  214. extern FILE *defines_file;
  215. extern FILE *input_file;
  216. extern FILE *output_file;
  217. extern FILE *text_file;
  218. extern FILE *union_file;
  219. extern FILE *verbose_file;
  220.  
  221. extern int nitems;
  222. extern int nrules;
  223. extern int nsyms;
  224. extern int ntokens;
  225. extern int nvars;
  226. extern int ntags;
  227.  
  228. extern char unionized;
  229. extern char line_format[];
  230.  
  231. extern int   start_symbol;
  232. extern char  **symbol_name;
  233. extern short *symbol_value;
  234. extern short *symbol_prec;
  235. extern char  *symbol_assoc;
  236.  
  237. extern short *ritem;
  238. extern short *rlhs;
  239. extern short *rrhs;
  240. extern short *rprec;
  241. extern char  *rassoc;
  242.  
  243. extern short **derives;
  244. extern char *nullable;
  245.  
  246. extern bucket *first_symbol;
  247. extern bucket *last_symbol;
  248.  
  249. extern int nstates;
  250. extern core *first_state;
  251. extern shifts *first_shift;
  252. extern reductions *first_reduction;
  253. extern short *accessing_symbol;
  254. extern core **state_table;
  255. extern shifts **shift_table;
  256. extern reductions **reduction_table;
  257. extern unsigned *LA;
  258. extern short *LAruleno;
  259. extern short *lookaheads;
  260. extern short *goto_map;
  261. extern short *from_state;
  262. extern short *to_state;
  263.  
  264. extern action **parser;
  265. extern int SRtotal;
  266. extern int RRtotal;
  267. extern short *SRconflicts;
  268. extern short *RRconflicts;
  269. extern short *defred;
  270. extern short *rules_used;
  271. extern short nunused;
  272. extern short final_state;
  273.  
  274. /* global functions */
  275.  
  276. extern char *allocate();
  277. extern bucket *lookup();
  278. extern bucket *make_bucket();
  279.  
  280.  
  281. /* system variables */
  282.  
  283. extern int errno;
  284.  
  285. /* system functions */
  286. #include <string.h>
  287. #include <stdlib.h>
  288.  
  289. /* prototypes */
  290. void done(int k);
  291.  
  292. void output(void);
  293. void reader(void);
  294. void write_section(char *section[]);
  295. void reflexive_transitive_closure(unsigned *R, int n);
  296. void lalr(void);
  297. void lr0(void);
  298. void make_parser(void);
  299. void free_parser(void);
  300. void create_symbol_table(void);
  301. void free_symbol_table(void);
  302. void free_symbols(void);
  303. void set_first_derives(void);
  304. void closure(short *nucleus, int n);
  305. void finalize_closure(void);
  306. void verbose(void);
  307.  
  308. void fatal(char *msg);
  309. void no_space(void);
  310. void open_error(char *filename);
  311. void unexpected_EOF(void);
  312. void syntax_error(int st_lineno, char *st_line, char *st_cptr);
  313. void unterminated_comment(int c_lineno, char *c_line, char *c_cptr);
  314. void unterminated_string(int s_lineno, char *s_line, char *s_cptr);
  315. void unterminated_text(int t_lineno, char *t_line, char *t_cptr);
  316. void unterminated_union(int u_lineno, char *u_line, char *u_cptr);
  317. void over_unionized(char *u_cptr);
  318. void illegal_tag(int t_lineno, char *t_line, char *t_cptr);
  319. void illegal_character(char *c_cptr);
  320. void used_reserved(char *s);
  321. void tokenized_start(char *s);
  322. void retyped_warning(char *s);
  323. void reprec_warning(char *s);
  324. void revalued_warning(char *s);
  325. void terminal_start(char *s);
  326. void restarted_warning(void);
  327. void no_grammar(void);
  328. void terminal_lhs(int s_lineno);
  329. void prec_redeclared(void);
  330. void unterminated_action(int a_lineno, char *a_line, char *a_cptr);
  331. void dollar_warning(int a_lineno, int i);
  332. void dollar_error(int a_lineno, char *a_line, char *a_cptr);
  333. void untyped_lhs(void);
  334. void untyped_rhs(int i, char *s);
  335. void unknown_rhs(int i);
  336. void default_action_warning(void);
  337. void undefined_goal(char *s);
  338. void undefined_symbol_warning(char *s);
  339.  
  340.